iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

Unit Test 學習路系列 第 3

Day 2: Unit Test/Integration Test/E2E Test 的區別。

  • 分享至 

  • xImage
  •  

這幾天查詢資料時發現,Unit Test 只是測試項目的其中一種類型。
依照不同的目的與測試範圍,會使用對應的測試項目。
所以今天,我會來學習有哪些主要的測試類型,實務上我有哪些更適合的選擇。


  • Unit Test (單元測試)
  • Integration Test (整合測試)
  • E2E Test (端至端測試)
  • 我的不專業想法

Unit Test/Integration Test/E2E Test
圖片來源

Unit Test (單元測試)

  • 定義:小範圍 functions, methods, classes 測試,著重在單一、獨立的I/O測試。
  • 適合使用情境:
    • Type of code is algorithms and complex business logic.
    • Also applications that don’t have strong typing might benefit from unit tests.
    • Focused feedback which can help us understand what exactly went wrong.

This type of test is not as useful if it’s not used in a very focused and specific way.
Unit Test is not useful for applications that have a lot of coordination code with minimal logic.

Integration Test (整合測試)

  • 定義:測試不同的模組、服務之間的溝通是否符合預期。
  • 適合使用情境:
    • 需要確認一組行為能正確協作。
    • 適合用於持續集成(CI)流程,以確保集成後的代碼不會破壞功能。

If an integration test fails, it does not tell us why exactly it failed.

E2E Test (端至端測試)

  • 定義:End-to-End 終端測試,代表整體 Work Flow 行為(用戶端至裝置端)都是測試範疇。E2E Test 更著重在「使用者行為」的整體操作,開發成本最高,卻可以有效確認最終功能是否滿足客戶需求。
  • 適合使用情境:
    • 經過 Unit Test, Integration Test 排除錯誤,且初步驗收功能階段完成後,再進行較佳。
    • UI Testing。

不適合初期開發階段,因為成本太高,而且測試範圍太廣,一旦出現 Error,難以辨認是哪個環節出問題。


我的不專業想法

我在實務專案CRM系統中,簡化版的開發流程大致會像:

  • 第一輪:開發過程,由開發人員手動測試。
  • 第二輪:功能驗收,交給提出需求的負責窗口進行操作測試。
  • 第三輪:功能上線,讓所有同事直接操作,回饋問題,即時更正。

上面三階段,都是進行人工測試,會遇到一些問題:

  • 無法量化或簡化測試時間。
  • 總會有疏漏,只能透過同事的反饋修正錯誤,但修改後可能會影響其他功能,變成需要不斷依賴回饋進行修正,有可能越改越歪。
  • 反饋的錯誤可大可小,如果是重要功能出問題,會影響公司產能(成本)。

如果可以加入測試開發,依照測試目的,我可能會安排成以下:

  • 第一輪:開發過程,由開發人員手動測試進行「核心功能」Unit Test/Integration Test
  • 第二輪:功能驗收,交給提出需求的負責窗口進行操作測試。
  • 第三輪:確認開發功能符合需求後,為了長期維護考量,由開發人員針對「核心功能」撰寫自動化 E2E Test
  • 第四輪:功能上線,讓所有同事直接操作,回饋問題,即時更正。

人工測試還是沒有捨棄,主要原因是「確認功能符合需求」也是溝通上重要的一環。而所有加入測試的環節只針對「核心功能」,畢竟時間真的有限,理想上在上線前為重要功能反覆做測試,對我而言已經很完美了!

  • 第一輪開發中,選擇混者 Unit Test/Integration Test的原因:
    • 我覺得需要依據開發的核心功能是什麼,加上團隊一起討論而決定。
      尤其想測試的功能需要搭配 Integration Test 才更有測試價值的話。
    • 另一個可能性是 Integration Test 需要準備的測試環境比 Unit Test 複雜度(成本)更高,又屬於開
      發環節,比較難符合經濟效益,向老闆要更多的時間滿困難的。
  • E2E Test 對於公司來說,更具體模擬使用者操作,直接確認客戶需求。搭配自動化測試,省時間且功能迭代不容易出錯(降低客戶投訴),不管對於開發者還是公司,都能看到好處,是滿值得投資的一項測試方式。

參考資源


上一篇
Day 1: 測試的基本概念和好處。
下一篇
Day 3: Unit Test/Integration Test/E2E Test 的快速實作。
系列文
Unit Test 學習路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言